perm filename SUN.SAI[1,BGB] blob sn#090824 filedate 1974-05-07 generic text, type T, neo UTF8
00100	BEGIN	"SUN"
00200		DEFINE α = "COMMENT",  π = "3.1415927";
00300		REQUIRE "SAITRG[SYS,BGB]" LOAD_MODULE;
00400		EXTERNAL REAL PROCEDURE SIN (REAL X);
00500		EXTERNAL REAL PROCEDURE COS (REAL X);
00600		EXTERNAL REAL PROCEDURE ACOS (REAL X);
00700		EXTERNAL REAL PROCEDURE ATAN2 (REAL X,Y);
00800		EXTERNAL REAL PROCEDURE SQRT (REAL X);
00900	
01000		REAL SUNAZM,SUNALT,TIME;
01100		INTEGER DAY;
01200		REAL X,Y,Z,R;
01300		REAL EAST,NORTH,ZENITH;
01400	PROCEDURE PRINT;
01500	BEGIN
01600		SETFORMAT(0,3);
01700		OUTSTR("EAST = "&CVF(EAST));
01800		OUTSTR(9&"NORTH= "&CVF(NORTH));
01900		OUTSTR(9&"ZENITH="&CVF(ZENITH));
02000		R	←	SQRT(EAST↑2 + NORTH↑2 + ZENITH↑2);
02100		OUTSTR(9&CVF(R)&13&10);
02200	END;
     

00100	PROCEDURE SUN;
00200	BEGIN	"SUN"
00300		REAL RHO,PHI,TMP;
00350		DEFINE	     LAB = "(153*3.1415927/180)";
00400		DEFINE	     LAT = "((37+23/60)*3.1415927/180)";
00500		DEFINE	ECLIPTIC = "((23+27/60)*3.1415927/180)";
00600		RHO	←	2*π*DAY/365.25;
00700	α POSITION OF THE SUN ON THE ECLIPTIC IN THE CELESTIAL SPHERE;
00800		EAST	←	SIN(RHO)*COS(ECLIPTIC);
00900		NORTH	←	SIN(RHO)*SIN(ECLIPTIC);
01000		ZENITH	←	COS(RHO);
01100	α LOCAL MERIDIAN OF LONGITUDE IS APPARENT SOLAR TIME = (P.S.T. - 8:44);
01200		PHI	←	π*(1-TIME/12) - ATAN2(EAST,ZENITH);
01300		TMP   	←	ZENITH*COS(PHI) - SIN(PHI)*EAST;
01400		EAST	←	  EAST*COS(PHI) + SIN(PHI)*ZENITH;
01500		ZENITH	←	TMP;
01600	α ROTATE CW IN THE NORTH/ZENITH PLANE TO THE LOCAL LATITUDE;
01700		TMP   	←	COS(LAT)*ZENITH + SIN(LAT)*NORTH;
01800		NORTH	←	COS(LAT)*NORTH  - SIN(LAT)*ZENITH;
01900		ZENITH	←	TMP;
01910	α ROTATE CW TO LAB COORDINATES;
01920		EAST	←	COS(LAB)*EAST   +  SIN(LAB)*NORTH;
01930		NORTH	←	COS(LAB)*NORTH  -  SIN(LAB)*EAST ;
02000	α CONVERT TO ANGULAR MEASURES;
02100		SUNAZM	←	ATAN2 (NORTH,EAST);
02200		SUNALT	←	π/2 - ACOS  (ZENITH);
02300	END	"SUN";
     

00100		WHILE TRUE DO
00200	BEGIN	"TEST"
00300		LABEL L;
00400		INTEGER CHR,BRK;
00500		STRING S;
00600		SUN;
00700		OUTSTR("	DAY = "&CVS(DAY));
00800		OUTSTR("	TIME = "&CVF(TIME));
00900		OUTSTR("	AZIM = "&CVS(SUNAZM*180/π));
01000		OUTSTR("	ALT = "&CVS(SUNALT*180/π));
01100		OUTSTR(13&10);
01200		OUTSTR("*");
01300		S	←	INCHWL;
01400		IF LENGTH(S)=0 THEN GO L;
01500		CHR	←	LOP(S);
01600		IF CHR="D" THEN DAY ← INTSCAN(S,BRK) ELSE
01700		IF CHR="T" THEN TIME←REALSCAN(S,BRK) ;
01800	L:
01900	END	"TEST";
02000	END	"SUN";